package com.tanhua.server.service;

import com.tanhua.dubbo.api.SoulApi;
import com.tanhua.model.domain.Questionnaire;
import com.tanhua.model.domain.SoulQuestion;
import com.tanhua.model.domain.SoulQuestionOption;
import com.tanhua.model.vo.SoulQuestionOptionVo;
import com.tanhua.model.vo.SoulQuestionVo;
import com.tanhua.model.vo.SoulVo;
import com.tanhua.server.interceptor.UserHolder;
import org.apache.dubbo.config.annotation.DubboReference;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

@Service
public class SoulService {
    @DubboReference
    private SoulApi soulApi;

    public List<SoulVo> getTestSoul() {
        //创建返回值对象列表
        List<SoulVo> vos = new ArrayList<>();
        //获取当前用户id
        Long userId = UserHolder.getUserId();
        //调用api,查询题目等级列表
        List<Questionnaire> questionnaireList = soulApi.QuestionnaireList();
        //循环遍历,根据每一个等级Id questionnaireId获得题目列表
        for (Questionnaire questionnaire : questionnaireList) {
            SoulVo soulVo = new SoulVo();
            //题目等级克隆到soulVo对象
            BeanUtils.copyProperties(questionnaire, soulVo);
            soulVo.setLevel(questionnaire.getLevel().toString());
            soulVo.setStar(Integer.parseInt(questionnaire.getStar().toString()));
            //调用api,获得这个等级的题目列表
            List<SoulQuestion> questionList = soulApi.questionByQuestionnaireId(questionnaire.getId());
            //遍历题目,根据题目id获得答案
            List<SoulQuestionVo> soulQuestionVos = new ArrayList<>();
            for (SoulQuestion soulQuestion : questionList) {
                //创建题目vo对象
                SoulQuestionVo soulQuestionVo = new SoulQuestionVo();
                soulQuestionVo.setId(String.valueOf(soulQuestion.getId()));
                soulQuestionVo.setQuestion(soulQuestion.getStem());
                //调用api,根据题目id,查询答案
                List<SoulQuestionOption> optionList = soulApi.optionByQuestionId(soulQuestion.getId());
                //创建答案vos列表
                List<SoulQuestionOptionVo> optionVos = new ArrayList<>();
                //循环遍历,转化为vo对象
                for (SoulQuestionOption option : optionList) {
                    //创建答案vo对象
                    SoulQuestionOptionVo optionVo = new SoulQuestionOptionVo();
                    //赋值
                    optionVo.setId(String.valueOf(option.getId()));
                    optionVo.setOption(option.getContent());
                    optionVos.add(optionVo);
                }
                //答案vos列表赋值给题目vo
                soulQuestionVo.setOptions(optionVos);
                soulQuestionVos.add(soulQuestionVo);
            }
            //题目vos对象赋值给等级vo对象
            soulVo.setQuestions(soulQuestionVos);
            vos.add(soulVo);
        }
        return vos;
    }

    //提交问卷
    public void postTestSoul(List<HashMap> answers) {

    }
}
